<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Api\BaseApiController;
use Illuminate\Http\Request;

/**
 * 地址控制器
 * 用于处理省市区三级地址数据的获取
 */
class AddressController extends BaseApiController
{
    /**
     * 获取省市区数据
     * 
     * 功能说明：
     * - 支持获取省份、城市、区县三级地址数据
     * - grade参数控制获取级别：2=省份，3=城市，4=区县
     * - parentID参数指定上级地址ID，用于获取下级地址
     * 
     * 请求参数：
     * @param Request $request
     *   - grade: 地址级别 (2=省份, 3=城市, 4=区县，默认为2)
     *   - parentID: 上级地址ID (获取城市时需要省份ID，获取区县时需要城市ID)
     * 
     * 返回格式：
     * @return \Illuminate\Http\JsonResponse
     *   - result: 1=成功, 0=失败
     *   - msg: 提示信息
     *   - list: 地址数据列表，包含id、name、parentID、grade字段
     */
    public function getAddressData(Request $request)
    {
        // 获取地址级别参数，默认为2（省份级别）
        $grade = $this->getParam($request, 'grade', 2);
        // 获取上级地址ID参数
        $parentId = $this->getParam($request, 'parentID', 0);
        
        // 兼容性处理：如果没有parentID参数，尝试从parentId获取
        if ($parentId === 0) {
            $parentId = $this->getParam($request, 'parentId', 0);
        }
        
        try {
            // 构建数据库查询
            $query = \DB::table('ims_yz_address');
            
            // 根据级别参数设置查询条件
            if ($grade == 2) {
                // 获取省份数据（level=1）
                $query->where('level', 1);
            } elseif ($grade == 3) {
                // 获取城市数据（level=2），需要指定所属省份
                $query->where('level', 2)->where('parentid', $parentId);
            } elseif ($grade == 4) {
                // 获取区县数据（level=3），需要指定所属城市
                $query->where('level', 3)->where('parentid', $parentId);
            }
            
            // 执行查询，返回标准格式数据
            $list = $query->select('id', 'areaname as name', 'parentid as parentID', 'level as grade')
                          ->orderBy('id')
                          ->get()
                          ->toArray();
            
            // 返回成功响应
            return response()->json([
                'result' => 1,
                'msg' => '获取成功',
                'list' => $list
            ]);
            
        } catch (\Exception $e) {
            // 记录错误日志
            \Log::error('获取地址数据失败: ' . $e->getMessage());
            // 返回失败响应
            return response()->json([
                'result' => 0,
                'msg' => '获取地址数据失败',
                'list' => []
            ]);
        }
    }
}
